/** 自定义的面向方向检测模块,使用前需指定左,右对应的按键并新建实例
  By setycyas @2023-01-31
*/

class MyFaceDetector {
  
  ;实例变量,
  _leftKey := "left" ;左键
  _rightKey := "right" ;右键
  _face := "" ;当前方向对应的键
  
  ;构造函数,依次指定检测的WinTitle,左右键,其中WinTitle就是ahk定义热键生效时的WinTitle,如果空则响应所有输入
  __New(wTitle := "", leftKey := "left", rightKey := "right"){
    local funLeft, funRight ;按左右键的函数对象的临时变量
    this._leftKey := leftKey
    this._rightKey := rightKey
    this._face := this._rightKey
    ;绑定左右按键响应
    funLeft := this._onLeftKey.bind(this)
    funRight := this._onRightKey.bind(this)
    if (wTitle == "") {
      Hotkey, ~%leftKey%, % funLeft
      Hotkey, ~%rightKey%, % funRight
    } else {
      Hotkey, IfWinActive, %wTitle%
      Hotkey, ~%leftKey%, % funLeft
      Hotkey, ~%rightKey%, % funRight
      Hotkey, IfWinActive
    }
    
  }
  
  /* 公有函数 
  */
  
  ;获取当前面向方向
  getFace(){
    return this._face
  }
  ;获取当前方向的反方向
  getBackFace(){
    return (this._face == this._leftKey) ? this._rightKey : this._leftKey
  }
  
  ;手动设置当前面向方向,face应为字符串left或right,实际上如果不是left,都当作right
  setFace(face){
    if (face == "left"){
      this._face := this._leftKey
    } else {
      this._face := this._rightKey
    }
  }
  
  /* 私有函数 
  */
  
  ;响应按左右键的函数
  _onLeftKey(){
    this._face := this._leftKey
  }
  _onRightKey(){
    this._face := this._rightKey
  }
  
}
